import Queue from "./queue";

// 循环队列
/**
 * @description:函数功能注释 击鼓传花
 * @param {Array<T>} 传花的元素数组
 * @param {number} 每次传花的次数
 * @return 返回winner离开的数组
 */
interface HotPotatoResult<T>{
    winner:T;
    elimated:Array<T>;
}

function hotPotato<T>(elementsList:Array<T>,num:number):HotPotatoResult<T>{
    // 1. 把数据入队，完成特定问题的ADT选型
    // 2. 调用ADT方法 完成业务 
    const queue:Queue<T>=new Queue();
    const elimitatedList:Array<T>=[]

    // 入队操作
    for(let i=0,len=elementsList.length;i<len;i++){
        queue.enqueue(elementsList[i])
    }

    while(queue.size()>1){
        for(let i=0;i<num;i++){
            queue.enqueue(queue.dequeue())
        }
        elimitatedList.push(queue.dequeue() as T)
    }

    return {
        elimated:elimitatedList,
        winner:queue.dequeue() as T
    }
}

const names=['刘xx','谢xx','白胡子','红发','黑胡子','大妈']

console.log(hotPotato(names,6))